package com.heima.model.schedule.pojos;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 任务日志表
 * </p>
 *
 * @author itheima
 */
@Data
@TableName("taskinfo_logs")
public class TaskinfoLogs implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任务id
     */
    @TableId(type = IdType.ID_WORKER)
    private Long taskId;

    /**
     * 执行时间
     */
    @TableField("execute_time")
    private Date executeTime;

    /**
     * 参数
     */
    @TableField("parameters")
    private byte[] parameters;

    /**
     * 优先级
     */
    @TableField("priority")
    private Integer priority;

    /**
     * 任务类型
     */
    @TableField("task_type")
    private Integer taskType;


    //需要在ScheduleApplication启动器里添加mybatis-plus乐观锁支持(拦截器)
    /**
     * 版本号,用乐观锁：当修改一条数据之后，每次去拿数据的时候（都会认为别人不会修改，也不会上锁）先从数据库中取出来，
     * 再对比一下版本号，如果版本号不一样，则代表数据已经被别人修改了，此时再从数据库中取一次，
     * 直到版本号相同，才代表数据没有被修改，才能提交。
     *
     * 效率高
     *
     * 例子：第一次更新数据的时候，版本号为1，
     * 然后修改操作，提交修改之前，判断版本号，如果版本号还是1，则可以提交，
     * 如果版本号不是1，则代表数据在中间已经被人修改过了，就不能提交了，
     * 此时再从数据库中取一次，直到版本号相同，才代表数据没有被修改，才能提交。
     *
     * 版本号+乐观锁，解决数据库并发更新的问题
     */
    @Version
    private Integer version;

    //效率低
    //悲观锁：当修改一条数据之后，就把当前这个数据锁定，
    //每次去拿数据的时候都认为别人会修改，所以每次都加锁，再从数据库中取一次，直到修改成功后，
    // 才释放锁，其它人才能操作这个数据

    /**
     * 状态 0=int 1=EXECUTED 2=CANCELLED
     */
    @TableField("status")
    private Integer status;


}
